﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.Linq.Expressions;
using System.Data;
using HardMobCommons;
using HardMobCommons.Entidades;

namespace HardMobInfra
{
	public class GenericRepository<T> where T : Entidade
	{
		private readonly IDbSet<T> db;
		private readonly DbContext context;

		public GenericRepository()
		{
			context = new TopicInfoContext();
			db = context.Set<T>();
		}

		public GenericRepository(DbContext context, DbSet<T> db)
		{
			this.context = context;
			this.db = db;
		}

		public void Delete(int id)
		{
			var entidade = db.Single(i => i.ID == id);
			Delete(entidade);
		}

		public void Delete(T entidade)
		{
			db.Remove(entidade);
		}

		public IEnumerable<T> Recuperar()
		{
			return db.ToList();
		}

		public T Recuperar(int id)
		{
			var entidade = db.Single(i => i.ID == id);

			return entidade;
		}

		public void Inserir(T entity)
		{
			db.Add(entity);
		}

		public void Atualizar(T entidade)
		{
			db.Attach(entidade);
			context.Entry(entidade).State = EntityState.Modified;
		}

		public void Dispose()
		{
			throw new NotImplementedException();
		}
	}
}
